package com.javacoo.swing.jxbrowser.engine;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.WindowConstants;

import com.javacoo.swing.jxbrowser.BaseBrowser;
import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.TerminationStatus;
import com.teamdev.jxbrowser.chromium.events.RenderAdapter;
import com.teamdev.jxbrowser.chromium.events.RenderEvent;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;

/**
 * 渲染流程事件
 * <li></li>
 * 每个 Browser 实例都在一个单独的本机进程中运行，在该进程中呈现Web页面。有时，由于插件崩溃，此进程可能会意外退出。要接收有关意外渲染过程终止的通知，可以使用 RenderListener。当您收到有关渲染过程终止的通知时，您可以显示一个像Google Chrome一样的“悲伤”图标，例如，通知用户此特定 浏览器 组件已崩溃。
 *
 * 如果刷新或加载相同或其他URL， 则将还原呈现过程和 浏览器实例
 *
 * @author: duanyong@jccfc.com
 * @since: 2020/9/24 8:50
 */
public class RenderProcessEvents extends BaseBrowser {
    public static void main(String[] args) {
        Browser browser = new Browser();
        BrowserView browserView = new BrowserView(browser);

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(browserView, BorderLayout.CENTER);
        frame.setSize(800, 600);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        browser.addRenderListener(new RenderAdapter() {
            @Override
            public void onRenderGone(RenderEvent event) {
                Browser browser = event.getBrowser();
                // Restore Browser instance by loading the same URL
                browser.loadURL(browser.getURL());
                System.out.println("Restore Browser instance by loading the same URL.");
            }
        });

        browser.addRenderListener(new RenderAdapter() {
            @Override
            public void onRenderCreated(RenderEvent event) {
                System.out.println("Render process is created.");
            }

            @Override
            public void onRenderGone(RenderEvent event) {
                System.out.println("Render process is gone:");
                TerminationStatus terminationStatus =
                    event.getTerminationStatus();
                System.out.println("Termination Status: " + terminationStatus);
            }
        });

        browser.addRenderListener(new RenderAdapter() {
            //如果刷新或加载相同或其他URL， 则将还原呈现过程和 浏览器实例
            @Override
            public void onRenderGone(RenderEvent event) {
                Browser browser = event.getBrowser();
                // Restore Browser instance by loading the same URL
                browser.loadURL(browser.getURL());
            }
        });

        browser.loadURL(BASE_URL);
    }
}
